<?php

namespace app\admin\model;

class AuthGroup extends ModelCore {
	// 写入完成
	protected $auto = [ 
		'update_time' 
	];
	// 新增完成
	protected $insert = [ 
		'create_time' 
	];
	// 更新完成
	protected $update = [ ];
	
	// 事件监听
	protected static function init() {
		// 写入前
		// self::beforeWrite ( function ($_Data) {});
		// 写入后
		// self::event('after_write', function ($_Data) {});
		// 新增前
		self::event('before_insert', function ($_Data) {
			//判断添加的是否为子角色
			if($_Data['p_id']>0){
				//获取父节点的用户数
				$_ParentUserCount = db('AuthGroupAccess')->where(['group_id'=>$_Data['p_id']])->count ();
				//判断用户数是否不为0
				if($_ParentUserCount>0){
					$_Data->error = '上级角色含有 ['.$_ParentUserCount.'] 个用户,禁止添加子节点';
					return false;
				}
			}
		});
		// 新增后
		// self::event('after_insert', function ($_Data) {});
		// 更新前
		self::event('before_update', function($_Data) {
			if($_Data['p_id'] == $_Data['id']){
				$_Data->error = '上级不能为自身';
				return false;
			}
			//获取原角色的信息
			$_OldInfo = db('AuthGroup')->where(['id'=>$_Data['id']])->find ();
			if($_Data['p_id'] != $_OldInfo['p_id']){
				//获取角色的用户数
				$_UserCount = db('AuthGroupAccess')->where(['group_id'=>$_Data['id']])->count ();
				//判断更新为子角色
				if($_Data['p_id']>0){
					//获取父节点的用户数
					$_ParentUserCount = db('AuthGroupAccess')->where(['group_id'=>$_Data['p_id']])->count ();
					//判断用户数是否不为0
					if($_ParentUserCount>0){
						$_Data->error = '新上级角色含有 ['.$_ParentUserCount.'] 个用户,禁止添加子节点';
						return false;
					}
				}elseif($_Data['p_id']==0 && $_OldInfo['p_id']>0){
					if($_UserCount>0){
						//原来是非顶级角色 现在改为顶级角色
						$_Data->error = '角色含有 ['.$_UserCount.'] 个用户,禁止修改为顶级角色';
						return false;
					}
				}
			}
		});
		// 更新后
		// self::event('after_update', function($_Data) {});
		// 删除前
		// self::beforeDelete ( function ($_Data) {});
		// 删除后
		// self::event('after_delete', function ($_Data) {});
	}
	// 自动完成
	protected function setCreateTimeAttr() {
		return time ();
	}
	protected function setUpdateTimeAttr() {
		return time ();
	}
	// 修改器
	// 获取器
	public function getCreateTimeAttr($value, $data) {
		return date ( "Y-m-d H:i:s", $value );
	}
	public function getUpdateTimeAttr($value, $data) {
		return date ( "Y-m-d H:i:s", $value );
	}
}